Skip to main content

Enumeración

Una enumeración es un tipo de datos definido por el usuario compuesto por una lista de miembros separados por comas (valores de enumeración) para declarar variables definidas por el usuario.

Declaras una enumeración en un DUT objeto, que ya ha creado en el proyecto haciendo clic Agregar objeto.

En el código de la aplicación, puede usar los componentes de enumeración como constantes cuyo identificador <enumeration name>.<component name> es reconocido a nivel mundial en el proyecto.

Para obtener más información, consulte: DUT

Declaración

Sintaxis

{attribute 'strict'}

TYPE <enumeration name> :

(

    <member name> := <value>

) <base data type> := <initialization> ;

END_TYPE

{attribute 'strict'}

Opcional

El pragma tiene el efecto de realizar una prueba de tipo estricta como se describe a continuación.

El pragma es opcional, pero recomendado.

<enumeration name>

Nombre de la enumeración que se puede utilizar en el código como tipo de datos

Ejemplo: COLOR_BASIC

    <member name> := <initial value>

Cualquier número de miembros, pero al menos dos miembros

Una enumeración es una lista de nombres de miembros separados por comas entre corchetes. El último miembro antes del corchete de cierre no necesita una coma. Todos los miembros tienen el mismo tipo de datos

Los valores de los miembros se inicializan automáticamente: a partir de 0, los valores se incrementan continuamente en 1. También puede asignar explícitamente un valor inicial fijo a los miembros individuales

Ejemplo: yellow := 1

<base data type>

Opcional

Puede asignar explícitamente uno de los siguientes tipos de datos base:

UINT | SINT | USINT | DINT | UDINT | LINT | ULINT | BYTE | WORD | DWORD | LWORD

Predeterminado: INT

:= <initialization>

Opcional

Uno de los miembros puede declararse explícitamente como miembro inicial.

Predeterminado: si no se especifica explícitamente una inicialización, la inicialización se realiza automáticamente con el miembro superior.

ejemplo 227. Ejemplo
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE COLOR_BASIC :
(
    yellow,
    green,
    blue,
    black
) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow
;
END_TYPE


Enumeración con tipo de datos básico explícito

Extensiones del estándar IEC 61131-3

El tipo de datos básico para una declaración de enumeración es INT por defecto. Sin embargo, también puede declarar enumeraciones que se basan explícitamente en otro tipo de datos enteros.

ejemplo 228. Ejemplo

Enumeración con tipo de datos base DWORD

TYPE COLOR :
(
        white := 16#FFFFFF00,
        yellow := 16#FFFFFF00,
        green := 16#FF00FF00,
        blue := 16#FF0000FF,
        black := 16#88000000
) DWORD := black
; // Basic data type is DWORD, default initialization for all COLOR variables is black
END_TYPE


Reglas de programación estrictas

Importante

En CODESYS V3.5 SP7 y superior, el pragma {attribute 'strict'} se agrega automáticamente en la primera línea al declarar una enumeración.

Las estrictas reglas de programación se activan al agregar el pragma {attribute 'strict'}.

. El siguiente código se considera un error del compilador:
  • Operaciones aritméticas con componentes de enumeración

    Por ejemplo, una variable de enumeración no se puede utilizar como variable de contador en un FOR círculo.

  • Asignación de un valor constante, que no corresponde a un valor de enumeración, a un componente de enumeración

  • Asignación de una variable no constante, que tiene otro tipo de datos como enumeración, a un componente de enumeración

Las operaciones aritméticas pueden dar lugar a que se asignen valores no declarados a los componentes de la enumeración. Un mejor estilo de programación es usar SWITCH/CASE instrucciones para procesar los valores de los componentes.

Declaración e inicialización de variables de enumeración

Sintaxis

<variable name> : <enumeration name> := <initialization> ;

En el caso de una declaración de una variable de enumeración con una enumeración definida por el usuario, la variable se puede inicializar con un miembro de enumeración.

ejemplo 229. Ejemplo
PROGRAM PLC_PRG
VAR
    colorCar: COLOR;
    colorTaxi : COLOR := COLOR.yellow;
END_VAR

La variable colorCar se inicializa con COLOR.black. Esa es la inicialización predeterminada para todas las variables de enumeración de tipo COLOR y definido de esta manera en la declaración de tipo. La variable colorTaxi tiene su propia inicialización.



Si no se especifican inicializaciones, entonces el valor de inicialización es 0.

ejemplo 230. Ejemplo
PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    cbTree: COLOR_BASIC := COLOR_BASIC.green;
END_VAR

La variable cbFlower se inicializa con COLOR_BASIC.yellow. Esa es la inicialización predeterminada para todas las variables de enumeración de tipo COLOR_BASIC. Dado que la declaración de enumeración no especifica un componente para la inicialización, el sistema se inicializa automáticamente con el componente que tiene el valor 0. Este suele ser el primero de los componentes de enumeración. Sin embargo, también puede ser otro componente que no esté en la primera posición pero explícitamente inicializado con 0.

La variable cbTree tiene una inicialización explícita.



Si no se especifica ningún valor para el tipo y la variable, se aplica la siguiente regla: si una enumeración contiene un valor para 0, entonces este valor es la inicialización predeterminada y, si no, el primer componente de la lista.

ejemplo 231. Ejemplo

Inicialización con el componente 0

TYPE ENUM :
(
    e1 := 2,
    e2 := 0,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e : ENUM;
END_VAR

La variable e se inicializa con ENUM.e2.

Inicialización con el primer componente

TYPE ENUM2 :
(
    e1 := 3,
    e2 := 1,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e2 : ENUM2;
END_VAR

La variable e2 se inicializa con ENUM.e1.



Acceso único a los componentes de enumeración

Extensiones del estándar IEC 61131-3

Los componentes de enumeración también se pueden utilizar como variables constantes con el identificador <enumeration name>.<component name>. Los componentes de enumeración son reconocidos globalmente en el proyecto y el acceso a ellos es único. Por lo tanto, un nombre de componente se puede utilizar en diferentes enumeraciones.

ejemplo 232. Ejemplo

Componente blue

PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    colorCar : COLOR;
END_VAR

(* unambiguous identifiers although the component names are identical *)
cbFlower := COLOR_BASIC.blue;
colorCar := COLOR.blue;

(* invalid code *)
cbFlower := blue;
colorCar := blue;


Para más información, ver: espacio de nombres de enumeración.